mzurhorst
Goto Top

Login-Status in Office365 ermitteln?

Hallo zusammen.

Wir haben auf unserem Terminalserver eine PLM-Anwendung laufen. Beim Revisionieren von Datensätzen legen Workflows automatisiert PDFs an etc, und dabei wird im Hintergrund (=unsichtbar) auf MS Office (Word, Excel) zugegriffen.

Die User nutzen die Office-Programme im Prinzip nicht auf dem Terminalserver.
Wenn Sie nun nach einer Frist X (=90 Tage?) irgendwann nicht mehr an Office365 angemeldet sind, dann schlägt der obige Prozess fehl, und Admins müssen dann aufwändig eingreifen.


Ich möchte gerne ein kleines Powershell-Skript in den Logon der Terminal-Session laden, welches checkt, ob der User noch angemeldet ist.
--> Wenn ja, mache nichts.
--> Und wenn nein, dann bringe eine Meldung und starte z.B. Excel im Vordergrund, damit der User sich anmelden kann.


Ich suche nun seit 2h im Internet hoch und runter, und finde nicht so richtig den Einstieg.
Habe erst MsOnline gefunden, und bin von da auf die GraphAPI gestoßen, weil MsOnline ab März 2024 zurückgezogen wird.

Da komme ich aber nicht weiter. Die GraphAPI ist bei uns im Konzern extrem zugenagelt. Dann muss ich die "Anwendung" genehmigen lassen und im ServiceNow registrieren. Ich frage mich daher, ob es nicht noch einen einfacheren Weg zum Ziel gibt.


Das einfache "Drumherum" meines Skripts war in 5min fertig.
Was ist nun der bevorzugte Weg um rauszufinden, ob der angemeldete User auch in Office angemeldet ist?


Vielen Dank und Grüße,
Marcus

Content-Key: 23439531916

Url: https://administrator.de/contentid/23439531916

Printed on: May 20, 2024 at 17:05 o'clock

Member: StefanKittel
StefanKittel Jan 30, 2024 at 23:53:33 (UTC)
Goto Top
Hallo,

andere Idee.
Einfach alle 30 Tage den User bitte ein bestimmtes Dokument zu öffnen.

Oder alle 30 Tage Excel im Hintergrund öffnen und schliessen.

Stefan
Member: mzurhorst
mzurhorst Jan 31, 2024 at 16:32:13 (UTC)
Goto Top
Hi Stefan,

das ginge wohl auch, aber das scheint mir zu wackelig zu sein.
Wenn der User aus Grund xyz abgemeldet ist, dann wird zwar Excel im Hintergrund gestartet, aber das Problem nicht gelöst.


Ich habe evtl. noch eine weitere Möglichkeit gefunden:
Get-ChildItem -Path 'HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities'  

In dem Pfad tauchen bei mir zwei Schlüssel auf.
Der erste hat einen alphanumerischen Hash und endet immer mit "_ADAL" im Namen.
Bei diesem taucht nach Abmelden aus Office eine neue Property names "SignedOut" (REG_DWORD, Wert = 1) auf.
Darin kann ich wohl den Login-Status erkennen.


Ich brauche also wohl zwei Dinge:
  • den Schlüssel mit dem "_ADAL" erkennen
  • prüfen ob darunter eine Property namens "SignedOut" existiert
registry
Member: mzurhorst
Solution mzurhorst Jan 31, 2024 at 23:11:31 (UTC)
Goto Top
Das Skript funktioniert über die Abfrage der Registry.
Evtl. kann ja jemand die Schnipsel gebrauchen face-smile

Danke euch!

# Check O365 Login Status
# (c) 2024, M. Zurhorst
#

## Check for the availability of the SignedOut property underneath the ..\Identities\*_ADAL registry key  
## and catch the exception when this property does not exist
try { $prop = Get-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\*_ADAL' -Name SignedOut -ErrorAction Stop }  
catch [System.Management.Automation.PSArgumentException] { $prop = 0 }


if($prop -eq 0) { Write-Host "User is authenticated. Ending ..." }  
else {
	Write-Host "User is not authenticated!`n`nLaunching noticiation popup ..."  

	# Determine current user for error message
	$CurrentUser = (Get-WMIObject -ClassName Win32_ComputerSystem).Username.Split('\')[1]  

	# Load the PresentationFramework module required for the message box
	Add-Type -AssemblyName PresentationFramework

	# Display Messagebox when User is not logged into O365
	# User shall decide whether or not login into Office is desired.
	$msgBoxInput =  [System.Windows.MessageBox]::Show("You (" + $CurrentUser + ") are currently not authenticated in Office365.`nThis may cause issues in COMOS release workflows.`n`nWould you like to launch Excel to (re-)authenticate?",'Warning: O365 Authentication missing','YesNo','Warning')  

	switch  ($msgBoxInput) {

	'Yes' {  
		
		## We launch Excel; the user shall now authenticate
		Start-Process 'C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE'  
	
	}

	'No' {  
	
		## We do nothing and respect the user decision! 
	
	}
	}

}